﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.ComponentModel;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Monopoly.Model;
using Microsoft.Win32;

namespace Monopoly
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        List<Brik> brikker;
        Bræt b;
        Spiller aktuelleSpiller;
        List<Spiller> spillerListe;
      
        List<Felt> felter;
        Terninger terning;

        public MainWindow()
        {
            InitializeComponent();
            brikker = new List<Brik>();
            spillerListe = new List<Spiller>();
            terning = new Terninger();
            
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
           
        }

        
            
        private void button1_Click_2(object sender, RoutedEventArgs e)
        {
            
            Spiller s = new Spiller(textBox1.Text, comboBox1.SelectedValue.ToString(), b);
            comboBox1.Items.RemoveAt(comboBox1.SelectedIndex);
            textBox1.Text = String.Empty;
            spillerListe.Add(s);
            stackPanel1.Children.Clear();
            felter[0].stackPanel1.Children.Clear();
            foreach (var item in spillerListe)
            {
                TextBlock t = new TextBlock();
                t.Background = (Brush)new BrushConverter().ConvertFromString(item.Brik.Farve);
                stackPanel1.Children.Add(t);
                Label l = new Label();
                l.Content = item.Navn + " kr. " + item.Kasse;
                l.Name = "lbl" + item.Navn;
                stackPanel1.Children.Add(l);
                Label label = new Label();
                label.Content = "Grunde:";
                stackPanel1.Children.Add(label);
                ComboBox combo = new ComboBox();
                combo.Name = "cb" + item.Navn;
                combo.Margin = new Thickness(0, 0, 0, 5);
                combo.ContextMenu = new System.Windows.Controls.ContextMenu();
                ContextMenu menu = new System.Windows.Controls.ContextMenu();
                MenuItem mi = new MenuItem();
                mi.Header = "Pantsæt";
                mi.AddHandler(MenuItem.ClickEvent, new RoutedEventHandler(ContextMenu_Click));
                menu.Items.Add(mi);
                combo.ContextMenu = menu;
                stackPanel1.Children.Add(combo);
                TextBlock spiller = new TextBlock();
                spiller.Height = 15;
                spiller.Width = 15;
                spiller.Background = (Brush)new BrushConverter().ConvertFromString(item.Brik.Farve);
                felter[0].stackPanel1.Children.Add(spiller);
            }
            aktuelleSpiller = s;
        }

        void ContextMenu_Click(object sender, RoutedEventArgs e)
        {
            
                throw new NotImplementedException("CLICK EVENTET TIL DENNE FUNKTION SKAL PROGRAMMERES!");
        }   
        public void UpdaterBrikker(Spiller item)
        {
            felter[item.Brik.Position.Position].stackPanel1.Children.RemoveAt(0);
            item.Tur();
            lblKast.Content = item.T.TerningerTotal;
            string slogTekst = item.Navn + " slog: " + item.T.TerningerTotal + " og landede på: " + item.Brik.Position.Navn;
            listBox1.Items.Add(slogTekst);
            listBox1.ScrollIntoView(slogTekst);
            item.T.TerningerTotal = 0;
            TextBlock b = new TextBlock();
            b.Height = 15;
            b.Width = 15;
            b.Background = (Brush)new BrushConverter().ConvertFromString(item.Brik.Farve);
            felter[item.Brik.Position.Position].stackPanel1.Children.Add(b);

            switch (item.Brik.Position.Sælges)
            {
                case true:
                    MessageBoxResult result = MessageBox.Show("Grunden er ikke ejet af nogen, vil du købe?", "Køb grund", MessageBoxButton.YesNo);
                    if (result == MessageBoxResult.Yes)
                    {
                        string tekst = item.Navn + " købte: " + item.Brik.Position.Navn + " | kr. -" + item.Brik.Position.Pris;
                        item.Brik.Position.Sælges = false;
                        item.MineFelter.Add(item.Brik.Position);
                        item.Kasse -= item.Brik.Position.Pris;
                        listBox1.Items.Add(tekst);
                        listBox1.ScrollIntoView(tekst);
                    }
                    break;
                case false:
                    switch (item.Brik.Position.Navn)
                    {
                        case "Start":
                        break;
                        case "Indkomstskat":
                        string tekst = item.Navn + " betalte indkomstskat | kr. -" + item.Brik.Position.Pris;
                        item.Kasse -= item.Brik.Position.Pris;
                        listBox1.Items.Add(tekst);
                        listBox1.ScrollIntoView(tekst);
                        break;
                        case "Statsskat":
                        tekst = item.Navn + " betalte statsskat | kr. -" + item.Brik.Position.Pris;
                        item.Kasse -= item.Brik.Position.Pris;
                        listBox1.Items.Add(tekst);
                        listBox1.ScrollIntoView(tekst);
                        break;
                        
                     }



                    break;
            }

            foreach (Label items in FindVisualChildren<Label>(stackPanel1))
            {
                if (items is Label)
                {
                    if ("lbl"+aktuelleSpiller.Navn == items.Name)
                    {
                        items.Content = item.Navn + " kr. " + item.Kasse;
                        
                    }
                }
            }
            foreach (ComboBox itemx in FindVisualChildren<ComboBox>(stackPanel1))
            {
                
                if (itemx is ComboBox)
                {
                    
                    if ("cb"+aktuelleSpiller.Navn == itemx.Name)
                    {
                        itemx.Items.Clear();
                        foreach (var itema in item.MineFelter)
                        {
                            itemx.Items.Add(itema.Navn);
                        }
                    }
                }
            }
        }


        private void comboBox1_Loaded(object sender, RoutedEventArgs e)
        {
            foreach (var item in typeof(Colors).GetProperties())
            {
                ComboBoxItem i = new ComboBoxItem();
                i.Content = item.Name;
                i.Background = (Brush)new BrushConverter().ConvertFromString(item.Name);
                if (item.Name == "Navy" || item.Name == "Black" || item.Name == "DarkBlue"|| item.Name == "Indigo")
                {
                    i.Foreground = Brushes.White;
                }
                comboBox1.Items.Add(i);
                
                
            }
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
                       
        }

        private void monopolyBræt1_Loaded(object sender, RoutedEventArgs e)
        {

        }

        private void button4_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.ShowDialog();

            felter = new List<Felt>();
            foreach (Felt item in FindVisualChildren<Felt>(this))
            {
                felter.Add(item);
            }
            this.b = new Bræt(ofd.FileName);
            for (int i = 0; i < b.Felter.Count; i++)
            {
                felter[i].lblFeltNavn.Content = b.Felter[i].Position + " " +b.Felter[i].Navn;
                felter[i].lblPant.Content = b.Felter[i].Pant;
                felter[i].lblPris.Content = b.Felter[i].Pris;
                felter[i].Background = (Brush)new BrushConverter().ConvertFromString(b.Felter[i].Farve);
            }
            
        }
        public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
        {
            if (depObj != null)
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                    if (child != null && child is T)
                    {
                        yield return (T)child;
                    }

                    foreach (T childOfChild in FindVisualChildren<T>(child))
                    {
                        yield return childOfChild;
                    }
                }
            }
        }
        
        private void button3_Click(object sender, RoutedEventArgs e)
        {
            button1.IsEnabled = false;
            UpdaterBrikker(aktuelleSpiller);
            aktuelleSpiller = aktuelleSpiller.NæsteSpiller(aktuelleSpiller, spillerListe);
            
            
            
            
        }

        private void button2_Click_1(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
    }
}
